// App全局状态管理
import API from '@/api/index.js';

const state = {
  // 是否显示登录弹窗
  showLoginDialog: false,
  // 登录成功后的回调函数队列
  loginCallbacks: [],
  // App环境信息
  appInfo: {
    // 平台类型：h5, app, mp(微信小程序)
    platformType: ''
  }
};

const mutations = {
  // 设置登录弹窗显示状态
  SET_LOGIN_VISIBLE(state, visible) {
    state.showLoginDialog = visible;
  },
  
  // 添加登录成功回调
  ADD_LOGIN_CALLBACK(state, callback) {
    state.loginCallbacks.push(callback);
  },
  
  // 清空登录成功回调队列
  CLEAR_LOGIN_CALLBACKS(state) {
    state.loginCallbacks = [];
  },
  
  // 设置平台类型
  SET_PLATFORM_TYPE(state, type) {
    state.appInfo.platformType = type;
  }
};

const actions = {
  // 显示登录弹窗并返回Promise
  showLoginDialog({ commit }) {
    return new Promise((resolve, reject) => {
      // 添加回调
      commit('ADD_LOGIN_CALLBACK', { resolve, reject });
      // 显示弹窗
      commit('SET_LOGIN_VISIBLE', true);
    });
  },
  
  // 执行登录成功回调并清空队列
  executeLoginCallbacks({ state, commit }) {
    // 执行所有回调
    state.loginCallbacks.forEach(callback => {
      if (callback && typeof callback.resolve === 'function') {
        callback.resolve();
      }
    });
    
    // 清空回调队列
    commit('CLEAR_LOGIN_CALLBACKS');
  },
  
  // 初始化平台类型
  initPlatformType({ commit }) {
    // #ifdef H5
    commit('SET_PLATFORM_TYPE', 'h5');
    // #endif
    
    // #ifdef APP-PLUS
    commit('SET_PLATFORM_TYPE', 'app');
    // #endif
    
    // #ifdef MP-WEIXIN
    commit('SET_PLATFORM_TYPE', 'mp');
    // #endif
  }
};

const getters = {
  // 是否是微信小程序环境
  isMpWeixin: state => state.appInfo.platformType === 'mp',
  
  // 是否是H5环境
  isH5: state => state.appInfo.platformType === 'h5',
  
  // 是否是App环境
  isApp: state => state.appInfo.platformType === 'app',
  
  // 是否需要显示手机号登录弹窗（H5或APP环境）
  needShowLoginDialog: state => ['h5', 'app'].includes(state.appInfo.platformType)
};

export default {
  namespaced: true,
  state,
  mutations,
  actions,
  getters
}; 